/* Author: Mark Faust
 *
 * C version of predictor file
*/

#ifndef PREDICTOR_H_SEEN
#define PREDICTOR_H_SEEN

#define TAKEN            true
#define NOT_TAKEN        false

#define PHI              68
#define HISTORY_LENGTH   28
#define NUM_PERCEPTRONS  146
#define NUM_WEIGHTS      28
#define PRIME_NUM        149

#include <cstddef>
#include <cstring>
#include <inttypes.h>
#include <vector>
#include <cmath>
#include "op_state.h"   // defines op_state_c (architectural state) class 
#include "tread.h"      // defines branch_record_c class


class PREDICTOR
{
    public:
        bool get_prediction( const branch_record_c* br, const op_state_c* os );

        void update_predictor( const branch_record_c* br, const op_state_c* os, bool taken );

};

#endif // PREDICTOR_H_SEEN
